/**
 * 函子
 */
// class Container {
//   constructor(value) {
//     this.value = value;
//   }
//   map(fn) {
//     return new Container(fn(this.value));
//   }
// }
// const res = new Container(5).map((x) => x + 1).map((x) => x * x);
// console.log(res)

class Container {
  static of(value) {
    return new Container(value);
  }

  constructor(value) {
    this.value = value;
  }

  map(fn) {
    return new Container(fn(this.value));
  }
}
const f = Container.of(5)
  .map((x) => x + 1)
  .map((x) => x * x);
console.log(f);
